package org.dreamwork.compilation;

/**
 * 虚拟字段
 *
 * Created by IntelliJ IDEA.
 * User: seth
 * Date: 2009-2-2
 * Time: 11:36:56
 */
public class VirtualField {
    private int modifier;
    private String type;
    private String name;

    /**
     * 获取访问修饰符
     * @return 访问修饰符
     */
    public int getModifier () {
        return modifier;
    }

    /**
     * 设置访问修饰符
     * @param modifier 访问修饰符
     */
    public void setModifier (int modifier) {
        this.modifier = modifier;
    }

    /**
     * 获取字段类型
     * @return 合法的 java 类型
     */
    public String getType () {
        return type;
    }

    /**
     * 设置字段类型
     * @param type 合法的 java 类型
     */
    public void setType (String type) {
        this.type = type;
    }

    /**
     * 获取字段名称
     * @return 符合 java 规范的标识符
     */
    public String getName () {
        return name;
    }

    /**
     * 设置字段名称
     * @param name 符合 java 规范的标识符
     */
    public void setName (String name) {
        this.name = name;
    }

    /**
     * 创建对该字段的读方法，即 getter 方法
     * @return getter 方法
     */
    public VirtualMethod getReader () {
        VirtualMethod vm = new VirtualMethod ();
        vm.setModifier (Modifier.PUBLIC);
        vm.setName ("get" + Character.toUpperCase (name.charAt (0)) + name.substring (1));
        vm.setReturnType (type);
        vm.addStatement ("return " + name);
        return vm;
    }

    /**
     * 创建对给字段的写方法，即 setter 方法
     * @return setter 方法
     */
    public VirtualMethod getWriter () {
        VirtualMethod vm = new VirtualMethod ();
        vm.setModifier (Modifier.PUBLIC);
        vm.setName ("set" + Character.toUpperCase (name.charAt (0)) + name.substring (1));
        vm.setReturnType (null);
        VirtualParameter vp = new VirtualParameter ();
        vp.setName (name);
        vp.setType (type);
        vm.addParameter (vp);
        vm.addStatement ("this." + name + " = " + name);
        return vm;
    }

    /**
     * 创建 java 代码  
     * @return java 代码
     */
    @Override
    public String toString () {
        return Modifier.experssion [modifier] + " " + type + " " + name;
    }
}